/**
  * @file structures.hh
  * @author Maxime Gaudin
  * @date 2011
  *
  * Ce fichier définit l'ensemble des structures de données nécessaire 
  * à l'algorithme ainsi que la fonction d'aide au calcul du coût d'un concert.
  */
#ifndef STRUCTURES_H_
#define STRUCTURES_H_
#include <vector>

struct Piece;

struct Musician {
  unsigned int id;
  unsigned int hourlyRate;
  
  std::vector < Piece* > pieces;
};

struct Piece {
  unsigned int id;
  unsigned int length;

  std::vector < Musician* > musicians;
};

struct Concert {
  std::vector< Musician* > musicians;
  std::vector< Piece* > pieces;
  unsigned int totalTime;

  Concert ( unsigned int mCount, unsigned int pCount ) {
    for ( ; mCount > 0; --mCount ) musicians.push_back( new Musician () );
    for ( ; pCount > 0; --pCount ) pieces.push_back( new Piece () );
  }
};

/**
  * @return Le coût totale de la pièce, c'est à dire la somme
  * du prix de chaque musicien.
  */
unsigned int getCost ( 
    std::vector< Piece* > const& pieces,
    std::vector< Musician* > const& musicians);

/** 
  * Affiche l'enchainement des pièce comme demandé dans le sujet, i.e. :
  * Cout totale de la pièce \n
  * Id1, Id2, ..., IdN
  */
void display ( std::vector < Piece* > const& pieces,
    std::vector< Musician* > const& musicians );
#endif
